
/**
 * @file xx_main.c 
 * created by xiang @@2024-02-09 15:56:59@zhuhai
 * test: demos, examples code
 */

/*********************
 *      INCLUDES
 *********************/
#include "xx_lvgl/lvgl.h"

//#include "lv_examples/lv_apps/demo/demo.h"
//#include "lv_examples/lv_apps/benchmark/benchmark.h"
//#include "lv_examples/lv_examples.h"

#include "xx_lvgl/demos/lv_demos.h"

#if LV_USE_ANIMIMG && LV_BUILD_EXAMPLES
LV_IMG_DECLARE(xx_animimg001)
LV_IMG_DECLARE(xx_animimg002)
LV_IMG_DECLARE(xx_animimg003)
LV_IMG_DECLARE(xx_arg_mode)

static const lv_img_dsc_t * anim_imgs[3] = {
    // &xx_animimg001,
    &xx_animimg002,
    &xx_animimg003,
    &xx_arg_mode,
};

static void xx_lv_example_animimg_1(void)
{
    lv_obj_t * animimg0 = lv_animimg_create(lv_scr_act());
    lv_obj_center(animimg0);
    lv_animimg_set_src(animimg0, (lv_img_dsc_t **) anim_imgs, 3);
    lv_animimg_set_duration(animimg0, 1000/1);
    lv_animimg_set_repeat_count(animimg0, 11);
    // lv_animimg_set_repeat_count(animimg0, LV_ANIM_REPEAT_INFINITE);
    lv_animimg_start(animimg0);
}
#endif

void xx_main (void) // called by main.c
{
    do {
        // lv_demo_music(); //@@ 展示LVGL库如何用于构建具有音频功能的图形用户界面
                         // 如何将LVGL与其他的库或框架集成，例如音频解码库、音频输出库等
        // lv_demo_benchmark(0); //@@ 基准测试: 用于测量和展示 LVGL 在不同任务上的性能
            /* 创建了一系列 GUI 组件，并在运行时测量它们的创建、更新和删除等操作所消耗的时间
               1. 创建和测量：生成大量的 GUI 组件（如按钮、标签、图像等），并测量
               它们的创建时间。这有助于了解在资源受限的嵌入式系统上创建图形元素的速度。
               2. 更新和测量：周期性地更新这些 GUI 组件的属性（如文本、颜色、大小等），
               并测量更新的性能。这可以帮助开发者理解在动态更新 UI 时系统的负担。
               3. 删除和测量：销毁这些 GUI 组件，并测量销毁操作所需的时间。这有助于
               评估资源回收和系统清理的效率。
               4. 绘制和测量：测量 GUI 组件的渲染和绘制时间，以评估图形渲染管道的性能
               5. 报告：将测量结果输出到控制台、串口或屏幕上，以供开发者分析
               通过运行本程序, 可以获得关于 LVGL 在特定硬件上运行时的性能数据，这有助于
               在设计 UI 时做出合理的优化决策，并了解在特定场景下 LVGL 的性能瓶颈
            */ 
        // lv_demo_flex_layout(); //@@ 非常好!! 可直观理解lvgl的各种layout效果
            /* Flex 布局是一种灵活的布局模型，允许子组件在容器内部以动态和自适应的方式排列
              1. 创建 Flex 容器：创建一个 Flex 容器，该容器将作为其他 GUI 组件的父容器
              2. 添加子组件：向 Flex 容器中添加各种 GUI 组件，如按钮、标签、图像等
              3. 配置 Flex 布局属性：设置 Flex 容器的布局属性，如排列方向
              （水平或垂直）、对齐方式、子组件之间的间距等
              4. 动态更新：展示如何动态地更新 Flex 容器中的子组件，例如添加、删除或修改子组件的属性，
              并观察 Flex 布局如何自动调整以适应这些变化
              5. 事件处理：为 Flex 容器和子组件添加事件处理函数，以响应用户的交互操作，如点击按钮等
              用Flex布局功能创建具弹性和自适应性的GUI,对于开发需要灵活布局的嵌入式应用非常有用
            */
        // lv_demo_keypad_encoder(); //@@ 一个虚拟的键盘或编码器(keypad encoder)界面
            /* 创建和配置一个模拟的键盘或编码器界面，包括按键或编码器的视觉表示，以及它们
               如何响应用户输入。这可能涉及到创建按钮、滑块、指示器等 GUI 组件，
               并将它们组合成一个完整的键盘或编码器界面
               包括用于处理用户输入的代码，例如当用户按下某个键或转动编码器时，程序会接收到
               相应的输入并作出响应。这通常涉及到事件处理机制，即当用户与 GUI 组件进行交互时，
               程序会触发相应的事件并调用相应的回调函数
            */
        lv_demo_stress(); //@@ 满负荷压力测试: 
            /* 创建大量的GUI元素和动态更新它们来模拟高负载情况,测试LVGL图形库的性能和稳定性
               创建许多按钮、文本框、滑块、图像等GUI元素，并使用动画、事件处理等功能来更新它们。
               这样可以在开发阶段发现潜在的性能问题，并对LVGL图形库进行优化。
            */
        // lv_demo_widgets(); //@@ 展示了如何使用LVGL库中的各种控件,如按钮,滑块,文本框,列表等
        // xx_test_start();

        // lv_example_btn_1();  // Simple Buttons
        // lv_example_btn_2();  // Styling buttons
        // lv_example_btn_3();  // Gummy button

        // lv_example_btnmatrix_1();    // Simple Button matrix
        // lv_example_btnmatrix_2();    // Custom buttons
        // lv_example_btnmatrix_3();    // Pagination

        // lv_example_calendar_1();    //!! 最多到2023年, 我手工改到2024了 in lv_calendar_header_dropdown.c; 必要时改到2050年

        // lv_example_canvas_1();   //!! Drawing on the Canvas and rotate
        // lv_example_canvas_2();   // Transparent Canvas with chroma keying
        // lv_example_canvas_3();   // Draw a rectangle to the canvas
        // lv_example_canvas_4();   // Draw a label to the canvas
        // lv_example_canvas_5();   // Draw an arc to the canvas
        // lv_example_canvas_6();   // Draw an image to the canvas
        // lv_example_canvas_7();   // Draw a line to the canvas

        // lv_example_chart_1();    // Line Chart
        // lv_example_chart_2();    //!! Faded area line chart with custom division lines
        // lv_example_chart_3();    // Axis ticks and labels with scrolling
        // lv_example_chart_4();    // Show the value of the pressed points
        // lv_example_chart_5();    //!! Display 1000 data points with zooming and scrolling
        // lv_example_chart_6();    //!! Show cursor on the clicked point
        // lv_example_chart_7();    // Scatter chart
        // lv_example_chart_8();    // Stacked area chart
        // lv_example_chart_9();    //!! 动态折线循环演示波形

        // lv_example_checkbox_1(); // Simple Checkboxes
        // lv_example_checkbox_2(); // Checkboxes as radio buttons

        // lv_example_colorwheel_1();   // Simple Colorwheel

        // lv_example_dropdown_1(); // Simple Drop down list
        // lv_example_dropdown_2(); // Drop down in four directions
        // lv_example_dropdown_3(); // Menu

        // lv_example_img_1();  // Image from variable and symbol
        // lv_example_img_2();  //!! Image recoloring
        // lv_example_img_3();  //!! Rotate and zoom
        // lv_example_img_4();  //!! Image offset and styling

        // lv_example_imgbtn_1(); //!!! Simple Image button 我另加了整体放大

        // lv_example_keyboard_1(); // Keyboard with text area
        // lv_example_keyboard_2(); //!! Keyboard with custom map 自定义键盘

        // lv_example_label_1();    //!! Line wrap, recoloring and scrolling
        // lv_example_label_2();    //!! Text shadow
        // lv_example_label_3();    //!!! Show LTR, RTL and Chinese texts
                                    // 需加配: LV_FONT_DEJAVU_16_PERSIAN_HEBREW && LV_FONT_SIMSUN_16_CJK && LV_USE_BIDI
                                    // 这样就有了中文,日文字库
        // lv_example_label_4();    // ?? 无反应 Draw label with gradient color
        // lv_example_label_5();    //!! Customize circular scrolling animation 个性化的循环通过样式来实现

        // lv_example_led_1(); // LED with custom style

        // lv_example_line_1(); // Simple Line

        // lv_example_list_1();    // Simple List
        // lv_example_list_2();    //!! Sorting a List using up and down buttons

        // lv_example_menu_1(); //!! Simple Menu
        // lv_example_menu_2(); // Simple Menu with root btn
        // lv_example_menu_3(); // Simple Menu with custom header
        // lv_example_menu_4(); //!! Simple Menu with floating btn to add new menu page
        // lv_example_menu_5(); //!!! Complex Menu

        // lv_example_meter_1();    //!!!
        // lv_example_meter_2();
        // lv_example_meter_3();
        // lv_example_meter_4();

        // lv_example_msgbox_1();   // Simple Message box

        // lv_example_obj_1();  //!! Base objects with custom styles
        // lv_example_obj_2();  //!! Make an object draggable

        // lv_example_roller_1();   // Simple Roller
        // lv_example_roller_2();   //!! Styling the roller
        // lv_example_roller_3();   //!!! add fade mask to roller

        // lv_example_slider_1();   // Simple Slider
        // lv_example_slider_2();   //!! Slider with custom style
        // lv_example_slider_3();   //!! Slider with extended drawer

        // lv_example_span_1(); //!! Span with custom styles 字符特殊显示,特效

        // lv_example_spinbox_1();  // Simple Spinbox 加减数值

        // lv_example_spinner_1();  // Simple spinner 圆弧转圈

        // lv_example_switch_1();   //!! Simple Switch

        // lv_example_table_1();    // Simple table
        // lv_example_table_2();    //!! Lightweighted list from table

        // lv_example_tabview_1();  // Simple Tabview
        // lv_example_tabview_2();  //!!! Tabs on the left, styling and no scrolling

        // lv_example_textarea_1(); //!! Simple Text area
        // lv_example_textarea_2(); //!! Text area with password field 密码输入
        // lv_example_textarea_3(); //!! Text auto-formatting

        // lv_example_tileview_1(); // Tileview with content

        // lv_example_win_1();

        // lv_example_anim_3();
        // lv_example_anim_2();
        // lv_example_anim_1();
        // lv_example_anim_timeline_1();
        // lv_example_event_1();
        // lv_example_event_2();

        // lv_example_anim_1();
        // lv_example_anim_2();
        // lv_example_anim_3();

        // xx_lv_example_animimg_1();
        // lv_example_animimg_1();
        // lv_example_arc_1();
        // lv_example_arc_2();
        // lv_example_bar_1();
        // lv_example_bar_2();
        // lv_example_bar_3();
        // lv_example_bar_4();
        // lv_example_bar_5();
        // lv_example_bar_6();

        // lv_example_barcode_1(); //@@ !! 生成并显示条码 (ok)
        // lv_example_bmp_1(); //@@ 目前直接图像都不能用, 须转换为.c后才可用
        // lv_example_png_1();
        // lv_example_gif_1();
        // lv_example_rlottie_1();
        // lv_example_sjpg_1(); //@@ 配置不支持直接图片
        // lv_example_tiny_ttf_1(); //@@ !! xx_lvgl\examples\libs\tiny_ttf\ubuntu_font.h 如何生成??
        // lv_example_tiny_ttf_2(); //@@ 暂无法使用 如何转换??: .ttf, .gif


        // lv_example_style_1();    // Size styles
        // lv_example_style_2();    // Background styles 背景渐变
        // lv_example_style_3();    // Border styles 边框常规
        // lv_example_style_4();    // Outline styles
        // lv_example_style_5();    // Shadow styles
        // lv_example_style_6();    //!! Image styles
        // lv_example_style_7();    // Arc styles  
        // lv_example_style_8();    // Text styles
        // lv_example_style_9();    // Line styles
        // lv_example_style_10();  //!! Transition 状态变化时有演变过程
        // lv_example_style_11();  //!!! Using multiple styles 里面的按键好漂亮 + ak练习
        // lv_example_style_12();  // Local styles
        // lv_example_style_13();  //!!! Add styles to parts and states
        // lv_example_style_14();  //!!! Extending the current theme
        // lv_example_style_15();  //!! Opacity and Transformations

        // lv_example_get_started_3();
        // lv_example_get_started_4();
    } while(0);

    /*Select display 1*/
    //    demo_create();

    /*Try the benchmark to see how fast your GUI is*/
    //    benchmark_create();

    /*Check the themes too*/
    //    lv_test_theme_1(lv_theme_night_init(15, NULL));

    //    lv_test_theme_2();
    /*Try the touchpad-less navigation (use the Tab and Arrow keys or the Mousewheel)*/
    //    lv_test_group_1();
}

